
using System;
using System.Text;
using NuevoGenNHibernate.CEN.Ebay;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using NuevoGenNHibernate.EN.Ebay;
using NuevoGenNHibernate.Exceptions;

namespace NuevoGenNHibernate.CAD.Ebay
{
public partial class VentaCAD : BasicCAD, IVentaCAD
{
public VentaCAD() : base ()
{
}

public VentaCAD(ISession sessionAux) : base (sessionAux)
{
}



public VentaEN ReadOIDDefault (int id_venta)
{
        VentaEN ventaEN = null;

        try
        {
                SessionInitializeTransaction ();
                ventaEN = (VentaEN)session.Get (typeof(VentaEN), id_venta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return ventaEN;
}


public int CrearVenta (VentaEN venta)
{
        try
        {
                SessionInitializeTransaction ();
                if (venta.Vendedor != null) {
                        venta.Vendedor = (NuevoGenNHibernate.EN.Ebay.UsuarioEN)session.Load (typeof(NuevoGenNHibernate.EN.Ebay.UsuarioEN), venta.Vendedor.Nick);

                        venta.Vendedor.Ventas.Add (venta);
                }
                if (venta.Usuario != null) {
                        venta.Usuario = (NuevoGenNHibernate.EN.Ebay.UsuarioEN)session.Load (typeof(NuevoGenNHibernate.EN.Ebay.UsuarioEN), venta.Usuario.Nick);

                        venta.Usuario.ListaSeguimiento.Add (venta);
                }
                if (venta.LineaVenta != null) {
                        foreach (NuevoGenNHibernate.EN.Ebay.LineaVentaEN item in venta.LineaVenta) {
                                item.CompraloYA = venta;
                                session.Save (item);
                        }
                }

                session.Save (venta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return venta.Id_venta;
}

public void ModificarVenta (VentaEN venta)
{
        try
        {
                SessionInitializeTransaction ();
                VentaEN ventaEN = (VentaEN)session.Load (typeof(VentaEN), venta.Id_venta);

                ventaEN.Finalizado = venta.Finalizado;


                ventaEN.FormaDePago = venta.FormaDePago;


                ventaEN.Fecha = venta.Fecha;


                ventaEN.Nombre = venta.Nombre;


                ventaEN.Descripcion = venta.Descripcion;


                ventaEN.PrecioFinal = venta.PrecioFinal;


                ventaEN.GastosEnvio = venta.GastosEnvio;

                session.Update (ventaEN);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }
}
public void EliminarVenta (int id_venta)
{
        try
        {
                SessionInitializeTransaction ();
                VentaEN ventaEN = (VentaEN)session.Load (typeof(VentaEN), id_venta);
                session.Delete (ventaEN);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }
}

public VentaEN ReadOID (int id_venta)
{
        VentaEN ventaEN = null;

        try
        {
                SessionInitializeTransaction ();
                ventaEN = (VentaEN)session.Get (typeof(VentaEN), id_venta);
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return ventaEN;
}

public System.Collections.Generic.IList<VentaEN> ReadAll (int first, int size)
{
        System.Collections.Generic.IList<VentaEN> result = null;
        try
        {
                SessionInitializeTransaction ();
                if (size > 0)
                        result = session.CreateCriteria (typeof(VentaEN)).
                                 SetFirstResult (first).SetMaxResults (size).List<VentaEN>();
                else
                        result = session.CreateCriteria (typeof(VentaEN)).List<VentaEN>();
                SessionCommit ();
        }

        catch (Exception ex) {
                SessionRollBack ();
                if (ex is NuevoGenNHibernate.Exceptions.ModelException)
                        throw ex;
                throw new NuevoGenNHibernate.Exceptions.DataLayerException ("Error in VentaCAD.", ex);
        }


        finally
        {
                SessionClose ();
        }

        return result;
}

public bool mandarExtracto(bool p_Finalizado, NuevoGenNHibernate.Enumerated.Ebay.TipoDePagoEnum p_FormaDePago, Nullable<DateTime> p_Fecha, string p_Nombre, string p_Descripcion, float p_precioFinal, float p_gastosEnvio, string p_vendedor, string p_usuario, System.Collections.Generic.IList<NuevoGenNHibernate.EN.Ebay.LineaVentaEN> p_lineaVenta)
{
    bool mandado = false;

    try
    {
        SessionInitializeTransaction();
        VentaEN ventaEN = (VentaEN)session.Load(typeof(VentaEN), p_Finalizado);
        session.Update(ventaEN);
        SessionCommit();
        mandado = true;
    }

    catch (Exception ex)
    {
        SessionRollBack();
        if (ex is NuevoGenNHibernate.Exceptions.ModelException)
            throw ex;
        throw new NuevoGenNHibernate.Exceptions.DataLayerException("Error in VentaCAD.", ex);
    }


    finally
    {
        SessionClose();
    }

    return mandado;
}

public bool realizarPago(int p_oid, NuevoGenNHibernate.Enumerated.Ebay.TipoDePagoEnum p_FormaDePago, Nullable<DateTime> p_Fecha, float p_PrecioFinal, float p_GastosEnvio, string p_vendedor, string p_usuario, bool p_pendiente)
{
    bool pagado = false;

    try
    {
        SessionInitializeTransaction();
        VentaEN ventaEN = (VentaEN)session.Load(typeof(VentaEN), p_pendiente);
        session.Update(ventaEN);
        SessionCommit();
        pagado = true;
    }

    catch (Exception ex)
    {
        SessionRollBack();
        if (ex is NuevoGenNHibernate.Exceptions.ModelException)
            throw ex;
        throw new NuevoGenNHibernate.Exceptions.DataLayerException("Error in VentaCAD.", ex);
    }


    finally
    {
        SessionClose();
    }

    return pagado;
}
}
}
